#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#include <linux/input.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <sys/ioctl.h>

/*************通过操作设备节点直接操作IIC在应用层中**************/
/***********全局变量**********/
int fd;

/*读取iic数据函数*/
int i2c_read_data(unsigned slave_addr,unsigned char reg_addr )//传入触摸芯片的地址，与相关寄存器地址
{
    unsigned char data;//存储读取到的数据
    int reg;
    struct i2c_rdwr_ioctl_data i2c_read_lcd;
    struct i2c_msg msg[2]={
        [0]={
            .add=slave_addr,
            .flags=0;
            .buf=&reg_addr, //从机的地址这条街的哪一栋楼
            .len=sizeof(reg_addr);//寄存器地址好比如是这栋楼中的那一层的意义
        },
        [1]={
            .add=slave_addr,
            .flags=1;
            .buf=&reg_addr, //从机的地址这条街的哪一栋楼
            .len=sizeof(data);//寄存器地址好比如是这栋楼中的那一层的意义
        },
    };

    i2c_read_lcd.msgs=msg;
    i2c_read_lcd.nmsgs=2;

    reg=ioctl(fd,I2C_RDWR,&i2c_read_lcd);
    if(reg<0){
        printf("ioctl error is:");
        return reg;
    }

    return data;//返回i2c读取到的数据
}

/*实现打开蜂鸣器的上层应用功能*/
int main(int argc,char*argv[])
{
    int TD_STATUS;
    fd=open("/dev/i2c-1",O_RDWR);//将输入的子系统的
        if(fd<0)
        {
            perror("open error\n");
            return fd;
        }

    while(1){
        TD_STATUS=i2c_read_data(0x38,0x02);//填入从机地址与寄存器地址
        printf("TD_STATUS is :%d\n",TD_STATUS);
        sleep(1);
    }


    // close(fd);//与release对应 
    return 0;
}